package br.com.artigo.primefaces.conteudo.web;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;

import org.primefaces.json.JSONException;
import org.primefaces.push.PushContext;
import org.primefaces.push.PushContextFactory;

import br.com.artigo.primefaces.conteudo.app.IRedatorBusiness;
import br.com.artigo.primefaces.conteudo.app.RedatorBusinessImpl;
import br.com.artigo.primefaces.conteudo.core.Campeonato;
import br.com.artigo.primefaces.conteudo.core.Lance;
import br.com.artigo.primefaces.conteudo.core.Partida;
import br.com.artigo.primefaces.conteudo.core.Time;
  
@ManagedBean
@ApplicationScoped
public class PartidaBean implements Serializable{  
  
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private String comentario;
	private String tempo;
	private String tipoLance;
	private String timeCasa;
	private String timeVisitante;
	private String campeonato;
	private Partida partida = null;
  
	private IRedatorBusiness redatorBusiness = new RedatorBusinessImpl();
	
	public synchronized void cadastrarLance() throws JSONException {
		
		if(partida != null) {
			Lance lance = new Lance();
			lance.setComentario(this.comentario);
			lance.setTipo(this.tipoLance);
			lance.setTempo(this.tempo);
			
			if(lance.getTipo() != null && lance.getTipo().equals("Gol Time Casa")) {
				this.partida.setPlacarTimeCasa(this.partida.getPlacarTimeCasa() + 1);
			} else if(lance.getTipo() != null && lance.getTipo().equals("Gol Time Visitante")) {
				this.partida.setPlacarTimeVisitante(this.partida.getPlacarTimeVisitante() + 1);
			}
			
			if(partida.getTempo() == 1) {
				partida.getLancesPrimeiroTempo().addFirst(lance);
			} else {
				partida.getLancesSegundoTempo().addFirst(lance);
			}
			
			PushContext pushContext = PushContextFactory.getDefault().getPushContext();  
			
	        pushContext.push("/counter", "Atualizado"); 
	        pushContext.push("/cadastroPartida", "Atualizado"); 
		}
		 
	}
	
	
	public synchronized void cadastrarPartida() throws JSONException {
		
		if(partida == null) {
			partida = new Partida();
			partida.setCampeonato(campeonato);
			partida.setTimeCasa(timeCasa);
			partida.setTimeVisitante(timeVisitante);
			
			PushContext pushContext = PushContextFactory.getDefault().getPushContext();  
	        pushContext.push("/cadastroPartida", 1); 
		}
		 
	}
	
	public synchronized void iniciarSegundoTempo() {
		if(partida != null) {
			this.partida.setTempo(2);
			PushContext pushContext = PushContextFactory.getDefault().getPushContext();  
	        pushContext.push("/cadastroPartida", 2); 
		}
	}
	
	public synchronized void voltarPrimeiroTempo() {
		if(partida != null) {
			this.partida.setTempo(1);
			PushContext pushContext = PushContextFactory.getDefault().getPushContext();  
	        pushContext.push("/cadastroPartida", 3); 
		}
	}
	
	public synchronized void anunciarFinalPartida() {
		if(partida != null) {
			this.partida.setTempo(3);
			PushContext pushContext = PushContextFactory.getDefault().getPushContext();  
	        pushContext.push("/cadastroPartida", 4); 
		}
	}
	
	public synchronized void encerrarPartida() {
			this.partida = null;
			PushContext pushContext = PushContextFactory.getDefault().getPushContext();  
	        pushContext.push("/cadastroPartida", 5); 
	        pushContext.push("/counter", "Counter"); 
	}
	
	public List<String> getTempoPartida() {
		List<String> tempoPartida = new ArrayList<String>();
		
		for(int i = 0; i <= 50; i++) {
			tempoPartida.add(String.valueOf(i));
		}
		
		return tempoPartida;
	}
	
	public int getNumeroLancesPrimeiroTempo() {
		if(partida != null) {
			if(partida.getLancesPrimeiroTempo() != null) {
				return partida.getLancesPrimeiroTempo().size();
			}
		}
		
		return 0;
	}
	
	public int getNumeroLancesSegundoTempo() {
		if(partida != null) {
			if(partida.getLancesSegundoTempo() != null) {
				return partida.getLancesSegundoTempo().size();
			}
		}
		
		return 0;
	}
	
	public List<Campeonato> getCampeonatos() {
		return redatorBusiness.buscarCampeonatos();
	}
	
	public List<Time> getTimes() {
		return redatorBusiness.buscarTimes();
	}
	
	public List<String> getTiposLance() {
		return redatorBusiness.buscarTipoLances();
	}
	
	
	public String getComentario() {
		return comentario;
	}

	public void setComentario(String comentario) {
		this.comentario = comentario;
	}

	public Partida getPartida() {
		return partida;
	}

	public void setPartida(Partida partida) {
		this.partida = partida;
	}

	public void setRedatorBusiness(IRedatorBusiness redatorBusiness) {
		this.redatorBusiness = redatorBusiness;
	}


	public String getTimeCasa() {
		return timeCasa;
	}


	public void setTimeCasa(String timeCasa) {
		this.timeCasa = timeCasa;
	}


	public String getTimeVisitante() {
		return timeVisitante;
	}


	public void setTimeVisitante(String timeVisitante) {
		this.timeVisitante = timeVisitante;
	}


	public String getCampeonato() {
		return campeonato;
	}


	public void setCampeonato(String campeonato) {
		this.campeonato = campeonato;
	}


	public IRedatorBusiness getRedatorBusiness() {
		return redatorBusiness;
	}


	public String getTipoLance() {
		return tipoLance;
	}


	public void setTipoLance(String tipoLance) {
		this.tipoLance = tipoLance;
	}


	public String getTempo() {
		return tempo;
	}


	public void setTempo(String tempo) {
		this.tempo = tempo;
	}
	
}  
           